namespace Nice157Advices.Advices
{
    /// <summary>
    /// 35、使用default为泛型类型指定初始值
    /// </summary>
    public static class _35
    {
        /*
            要让编译器接收为一个泛型类型参数指定一个初始值，最妥当的办法就是使用default关键字

            这样如果它在运行时碰到的T是一个整型，那么运行时会为其赋值0；如果T在运行时是一个Person这样的引用类型，则会为其赋null值
         */
        
        public static void Go ()
        {
            var t1 = Func<int> ();
            var t2 = Func<decimal> ();
            var t3 = Func<string> ();
            var t4 = Func<Student>();
            System.Console.WriteLine($"t1 {t1}");
            System.Console.WriteLine($"t2 {t2}");
            System.Console.WriteLine($"t3 {t3}");
            System.Console.WriteLine($"t4 {t4}");
        }

        private class Student
        {
            public string Name { get; set; }
        }

        private static T Func<T> ()
        {
            T t = default (T);
            return t;
        }
    }
}